[PYGRUB] Don't redraw the interactive menu screen if it doesn't need it.
authorTim Deegan <Tim.Deegan@xensource.com>
Mon, 22 Jan 2007 11:49:05 +0000 (11:49 +0000)
committerTim Deegan <Tim.Deegan@xensource.com>
Mon, 22 Jan 2007 11:49:05 +0000 (11:49 +0000)
Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com>
tools/pygrub/src/pygrub

index e28c19804a0c982b2c19d938031d80199982baf8..c0204da32e0bec6237dcb1cf00766fe1f672eafd 100644 (file)
@@ -400,14 +400,20 @@ class Grub:
                                    %(int(timeout) - mytime))
             else:
                 self.screen.addstr(20, 5, " " * 80)
-
             self.fill_entry_list()
+
             c = self.screen.getch()
-            if mytime != -1:
-                mytime += 1
-                if mytime >= int(timeout):
-                    self.isdone = True
-                    break
+            if c == -1:
+                # Timed out waiting for a keypress
+                if mytime != -1:
+                    mytime += 1
+                    if mytime >= int(timeout):
+                        self.isdone = True
+                        break
+            else:
+                # received a keypress: stop the timer
+                mytime = -1
+                self.screen.timeout(-1)
 
             # handle keypresses
             if c == ord('c'):
@@ -432,10 +438,8 @@ class Grub:
                 self.isdone = True
                 break
             elif c == curses.KEY_UP:
-                mytime = -1
                 self.selected_image -= 1
             elif c == curses.KEY_DOWN:
-                mytime = -1
                 self.selected_image += 1
 #            elif c in (ord('q'), 27): # 27 == esc
 #                self.selected_image = -1